library(tidyverse)
library(sf)
sigungu_shp <- st_read("sigungu.shp", options = "ENCODING=CP949")
ggplot() + geom_sf(data = sigungu_shp)R Lecture 10
웹 앱 개발: 심화
웹 앱 개발: 심화
지리공간적 시각화
사례: 전 세계 인구 분포 지도

사례: 전 세계 인구 분포 지도
데이터 레이어
국가 경계, 호수, 그래티큘: 벡터(vector) 데이터
인구밀도, 수심: 래스터(raster) 데이터
데이터 원천
Natural Earth Data: 국가 경계, 호수, 그래티큘, 수심
NASA’s Socioeconomic Data and Applications Center (SEDAC): 인구 밀도
투영법: 로빈슨 도법(Robinson projection)
- CRS (coordinate reference system, 좌표참조계)
지도화 기법: 컬러, 범례, 주기 표기 등
사례: 전 세계 인구 분포 지도
사례: 전 세계 인구 분포 지도
지리공간적 데이터의 종류
벡터(vector) 데이터
포인트, 라인, 폴리곤
형상 데이터 + 속성 데이터
래스터(raster) 데이터
그리드 셀(grid cell)
일체형
지리공간적 데이터의 종류

지리공간적 데이터의 종류

벡터 데이터
벡터 데이터: 형상 데이터 + 속성 데이터
형상 데이터 (기하, 도형, 공간 데이터)
지리공간적 객체 자체에 대한 데이터
포인트(점), 라인(선), 폴리곤(면)으로 구분
버텍스(vertex)의 좌표값
속성 데이터
지리공간적 객체가 보유한 속성
기존 일반 데이터와 동일
벡터 데이터
형상 데이터: 셰이프 파일(shape file) (ESRI사)
sigungu.shp: 버텍스의 좌표값이 포함된 핵심 파일sigungu.shx: 공간적 인덱싱 파일sigungu.dbf: 기본 속성 파일sigungu.prj: 투영 정보 파일
특수한 패키지 필요: sf 패키지
st_read()혹은read_sf()함수
벡터 데이터: sf 패키지
벡터 데이터: sf 패키지
| 구분 | 함수 |
|---|---|
| 읽고 쓰기 | st_read(), st_write(), read_sf(), write_sf() |
| 투영 관련 | st_crs(), st_transform() |
| 기하 측정 | st_area(), st_length(), st_perimeter(), st_distance() |
| 기하 변형 | st_centroid(), st_buffer(), st_boundary(), st_simplify() |
| 기하 생성 | st_point(), st_voronoi() , st_convex_hull(), st_make_grid() |
| 기하 검토 | st_is_valid(), st_make_valid() |
| 기하 중첩 | st_filter(), st_intersection(), st_union(), st_crop() |
| 기타 | st_coordinates(), st_cast(), st_as_sf(), st_graticule(), st_join() |
벡터 데이터: sf 패키지

벡터 데이터
래스터 데이터
데이터 형식
- TIFF 혹은 GeoTIFF
패키지: terra 패키지
불러오기:
rast()변환하기:
project(),mosaic(),crop()계산하기:
global(),focal(),zonal()수 많은 다른 함수들
CRS
CRS: 정의
좌표참조계 Coordinate Reference System
모든 지리공간데이터는 특정한 좌표참조계에 의거해 제작되며 이러한 좌표참조계는 매우 다양함
준거타원체
투영법(map projection)
투영 파라미터: 투영축, 투영격, 중앙경선, 가상원점 등
지리공간데이터의 SRID(Spatial Reference System Identifiers, 공간참조계식별자)
sf 패키지:
st_crs()함수
CRS: 방식
PROJ 정형문자열
- https://proj.org/en/9.4/
- 준거타원체, 투영법, 투영 파라미터를 + 기호로 연결해 작성한 문자열
- UTM-K
- +proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +units=m
EPSG 숫자코드
- https://epsg.io/
- 모든 CRS에 1024~32767 사이의 고유 숫자를 부여
- UTM-K
- EPSG: 5179
CRS: PROJ 정형문자열
- 세계지도를 위한 주요 투영법의 PROJ 별명(alias)
| 투영법 | PROJ 파라미터 |
|---|---|
| 정적원통 도법 Equal Area Cylindrical | +proj=cea |
| 컴펙트 밀러 도법 Compact Miller | +proj=comill |
| 에케르트 IV 도법 Eckert IV | +proj=eck4 |
| 정거원통 도법 Equidistant Cylindrical | +proj=eqc |
| 구드 도법 Goode Homolosine | +proj=goode |
| 단열형 구드 도법 Interrupted Goode Homolosine | +proj=igh |
| 메르카토르 도법 Mercator | +proj=merc |
| 몰바이데 도법 Mollweide | +proj=moll |
| 로빈슨 도법 Robinson | +proj=robin |
| 시뉴소이드 도법 Sinusoidal | +proj=sinu |
| 빈켈트리펠 도법 Winkel Tripel | +proj=wintri |
CRS: EPSG 숫자코드
- 널리 사용되는 CRS의 EPSG
| 적용 스케일 | EPSG 숫자코드 | 설명 |
|---|---|---|
| 전세계 | EPSG:4326 | WGS84, 측지좌표계, GPS에 사용 |
| EPSG:3857 | 웹 메르카토르 도법, 구글 맵스, 오픈스트리트맵에서 사용 | |
| EPSG:7789 | ITRF2014 | |
| 미국 | EPSG:2163 | 알베르스 정적원추 도법 |
| 유럽 | EPSG:3035 | 람베르트 정적방위 도법 |
| 우리나라 | EPSG:5179 | UTM-K |
| EPSG:5185 | 서부원점 | |
| EPSG:5186 | 중부원점 | |
| EPSG:5187 | 동부원점 | |
| EPSG:5188 | 동해원점 |
CRS: 세계지도에 적용
ggplot() +
geom_sf(data = world) +
geom_sf(data = ne_bbox, fill = NA) +
coord_sf(crs = "+proj=eqc") +
scale_x_continuous(breaks = seq(-180, 180, 30)) +
scale_y_continuous(breaks = c(-89.9, seq(-60, 60, 30), 89.9)) +
theme(
panel.background = element_rect("white"),
panel.grid = element_line(color = "gray80")
)
ggplot() +
geom_sf(data = world) +
geom_sf(data = ne_bbox, fill = NA) +
coord_sf(crs = "+proj=comill") +
scale_x_continuous(breaks = seq(-180, 180, 30)) +
scale_y_continuous(breaks = c(-89.9, seq(-60, 60, 30), 89.9)) +
theme(
panel.background = element_rect("white"),
panel.grid = element_line(color = "gray80")
)
ggplot() +
geom_sf(data = world) +
geom_sf(data = ne_bbox, fill = NA) +
coord_sf(crs = "+proj=robin") +
scale_x_continuous(breaks = seq(-180, 180, 30)) +
scale_y_continuous(breaks = c(-89.9, seq(-60, 60, 30), 89.9)) +
theme(
panel.background = element_rect("white"),
panel.grid = element_line(color = "gray80")
)
ggplot() +
geom_sf(data = world) +
geom_sf(data = ne_bbox, fill = NA) +
coord_sf(crs = "+proj=eck4") +
scale_x_continuous(breaks = seq(-180, 180, 30)) +
scale_y_continuous(breaks = c(-89.9, seq(-60, 60, 30), 89.9)) +
theme(
panel.background = element_rect("white"),
panel.grid = element_line(color = "gray80")
)
지리공간적 시각화: 정적 vs. 동적
정적 지도: 코로플레스 맵

정적 지도: 두 가지 관점
ggplot2 vs tmap: 세계지도
library(tidyverse)
library(spData)
library(sf)
data(world)
world <- st_as_sf(world)
wpp_2024 <- read_rds("wpp_2024.rds")
my_wpp <- wpp_2024 |>
filter(year == 2025)
world_data <- world |>
left_join(my_wpp, join_by(iso_a2 == ISO2))world_map <- ggplot() +
geom_sf(data = world_data, aes(fill = TFR, text = name_long)) +
coord_sf(crs = "+proj=robin") +
scale_fill_viridis_c() +
scale_x_continuous(breaks = seq(-180, 180, 30)) +
scale_y_continuous(breaks = c(-89.5, seq(-60, 60, 30), 89.5)) +
theme(
panel.background = element_rect("white"),
panel.grid = element_line(color = "gray80")
)
world_map
library(tmap)
tm_world_map <- tm_shape(world_data, crs = "+proj=robin") +
tm_graticules(
labels.show = FALSE,
x = seq(-180, 180, 30),
y = c(-89.5, seq(-60, 60, 30), 89.5)
) +
tm_polygons(
fill = "TFR",
fill.scale = tm_scale_continuous(values = "viridis")
) +
tm_layout(frame = FALSE)
tm_world_map
ggplot2 vs tmap: 우리나라 지도
library(tidyverse)
library(sf)
sido_shp <- st_read("sido.shp", options = "ENCODING=CP949")
sigungu_shp <- st_read("sigungu.shp", options = "ENCODING=CP949")
data_sigungu <- read_rds("data_sigungu.rds")
sigungu_data <- sigungu_shp |>
left_join(data_sigungu, join_by(SGG1_CD == C1))library(ggspatial)
sigungu_data <- sigungu_data |>
mutate(
index_class = case_when(
index < 0.2 ~ "1",
index >= 0.2 & index < 0.5 ~ "2",
index >= 0.5 & index < 1.0 ~ "3",
index >= 1.0 & index < 1.5 ~ "4",
index >= 1.5 ~ "5"
),
index_class = fct(index_class, levels = as.character(1:5))
)
class_color <- c("1" = "#d7191c", "2" = "#fdae61",
"3" = "#ffffbf", "4" = "#a6d96a",
"5" = "#1a9641")
ggplot_map <- ggplot() +
geom_sf(
data = sigungu_data,
aes(fill = index_class, text = SGG1_FNM),
show.legend = TRUE
) +
geom_sf(
data = sido_shp,
fill = NA,
lwd = 0.5
) +
scale_fill_manual(
name = "Classes",
labels = c("< 0.2", "0.2 ~ 0.5", "0.5 ~ 1.0",
"1.0 ~ 1.5", ">= 1.5"),
values = class_color, drop = FALSE
) +
annotation_scale(
location = "br",
bar_cols = c("gray40", "white"),
width_hint = 0.4
)
ggplot_map
class_color <- c("#d7191c", "#fdae61", "#ffffbf", "#a6d96a", "#1a9641")
tmap_map <- tm_graticules(labels.cardinal = TRUE) +
tm_shape(sigungu_data) +
tm_polygons(
fill = "index", id = "SGG1_FNM",
fill.scale = tm_scale_intervals(
values = class_color,
breaks = c(0, 0.2, 0.5, 1.0, 1.5, Inf),
labels = c("< 0.2", "0.2 ~ 0.5", "0.5 ~ 1.0",
"1.0 ~ 1.5", ">= 1.5")
),
fill.legend = tm_legend(title = "Classes")
) +
tm_shape(sido_shp) + tm_borders(lwd = 1.5) +
tm_scalebar(breaks = seq(0, 200, 50))
tmap_map
인터랙티브 지도: ggplotly() 함수
library(plotly)
ggplotly(world_map)library(plotly)
ggplotly(world_map)인터렉티브 지도: ggiraph 패키지
library(ggiraph)
sigungu_data <- sigungu_data |>
mutate(
index = format(index, digits = 4, nsmall = 4),
my_tooltip = str_c("Name: ", SGG1_FNM, "\n Index: ", index)
)
gg <- ggplot() +
geom_sf_interactive(
data = sigungu_data,
aes(fill = index_class, tooltip = my_tooltip, data_id = SGG1_FNM),
show.legend = TRUE
) +
geom_sf(data = sido_shp, fill = NA, lwd = 0.5) +
scale_fill_manual(
name = "Classes",
labels = c("< 0.2", "0.2 ~ 0.5", "0.5 ~ 1.0", "1.0 ~ 1.5", ">= 1.5"),
values = class_color, drop = FALSE
)
girafe(ggobj = gg) |>
girafe_options(opts_hover(css = "fill: gray"))leaflet: 자바스크립트 라이브러리
- R 래퍼 패키지: leaflet
leaflet: 단순 일반도
library(leaflet)
leaflet() |>
addTiles() |>
addPopups(126.955184, 37.460422, "Sang-Il's Office",
options = popupOptions(closeButton = FALSE))leaflet: 매시업(mashup) 주제도
library(leaflet)
world_data <- world_data |> filter(!is.na(TFR))
bins <- c(0, 1.5, 2.1, 3, 4, 5, Inf)
pal <- colorBin("YlOrRd", domain = world_data$TFR, bins = bins)
labels <- sprintf("<strong>%s</strong><br/>%g",
world_data$name_long, world_data$TFR) |> lapply(htmltools::HTML)
leaflet(world_data) |>
addProviderTiles(providers$Esri.WorldTopoMap) |>
addPolygons(
fillColor = ~pal(TFR), weight = 2, opacity = 1, color = "white",
dashArray = "3", fillOpacity = 0.6,
highlightOptions = highlightOptions(
weight = 5, color = "#666", dashArray = "",
fillOpacity = 0.6, bringToFront = TRUE
),
label = labels,
labelOptions = labelOptions(
style = list("font-weight" = "normal", padding = "3px 8px"),
textsize = "15px", direction = "auto"
)
) |>
addLegend(
pal = pal, values = ~TFR, opacity = 0.6, title = NULL, position = "bottomright"
)library(leaflet)
world_data <- world_data |> filter(!is.na(TFR))
bins <- c(0, 1.5, 2.1, 3, 4, 5, Inf)
pal <- colorBin("YlOrRd", domain = world_data$TFR, bins = bins)
labels <- sprintf("<strong>%s</strong><br/>%g",
world_data$name_long, world_data$TFR) |> lapply(htmltools::HTML)
leaflet(world_data) |>
addProviderTiles(providers$Esri.WorldTopoMap) |>
addPolygons(
fillColor = ~pal(TFR), weight = 2, opacity = 1, color = "white",
dashArray = "3", fillOpacity = 0.6,
highlightOptions = highlightOptions(
weight = 5, color = "#666", dashArray = "",
fillOpacity = 0.6, bringToFront = TRUE
),
label = labels,
labelOptions = labelOptions(
style = list("font-weight" = "normal", padding = "3px 8px"),
textsize = "15px", direction = "auto"
)
) |>
addLegend(
pal = pal, values = ~TFR, opacity = 0.6, title = NULL, position = "bottomright"
)library(tmap)
class_color <- c("#d7191c", "#fdae61", "#ffffbf", "#a6d96a", "#1a9641")
sigungu_data <- sigungu_data |> mutate(index = as.numeric(index))
tmap_mode(mode = "view")
my_tmap <- tm_shape(sigungu_data) +
tm_polygons(
fill = "index", fill_alpha = 0.6, col_alpha = 0.5,
popup.vars = c("지역소멸위험지수: " = "index"),
popup.format = list(index = list(digits = 3)),
id = "SGG1_FNM",
fill.scale = tm_scale_intervals(
values = class_color, breaks = c(0, 0.2, 0.5, 1.0, 1.5, Inf),
labels = c("< 0.2", "0.2~0.5", "0.5~1.0", "1.0~1.5", ">= 1.5")
),
fill.legend = tm_legend(title = "Classes")
) +
tm_shape(sido_shp) + tm_borders(lwd = 2)
my_tmapclass_color <- c("#d7191c", "#fdae61", "#ffffbf", "#a6d96a", "#1a9641")
sigungu_data <- sigungu_data |> mutate(index = as.numeric(index))
tmap_mode(mode = "view")
my_tmap <- tm_shape(sigungu_data) +
tm_polygons(
fill = "index", fill_alpha = 0.6, col_alpha = 0.5,
popup.vars = c("지역소멸위험지수: " = "index"),
popup.format = list(index = list(digits = 3)),
id = "SGG1_FNM",
fill.scale = tm_scale_intervals(
values = class_color, breaks = c(0, 0.2, 0.5, 1.0, 1.5, Inf),
labels = c("< 0.2", "0.2~0.5", "0.5~1.0", "1.0~1.5", ">= 1.5")
),
fill.legend = tm_legend(title = "Classes")
) +
tm_shape(sido_shp) + tm_borders(lwd = 2)
my_tmapLLM-기반 웹 앱 내용 요소
LLM: 개념
- Large Language Model (거대 언어 모델)
LLM: 개념
LLM API: 프로그래밍적 접근
LLM을 웹 인터페이스에서 사용하는 것이 아니라, 코드로 직접 제어하고 자동화하는 방식
API(Application Programming Interface, 응용프로그램 프로그래밍 인터페이스)
응용프로그램(예: 웹 앱)이 프로그래밍을 통해 다른 프로그램이나 서비스(예: ChatGPT)와 상호작용하도록 해 주는 접점
HTTP 요청(POST) + JSON 구조로 메시지 전달
모델 이름, 메시지, 파라미터를 코드로 지정
응답은 JSON 형태의 텍스트/토큰
대량 처리, 반복 처리, 자동화, 소프트웨어 통합
LLM API: 기본 구조
요청(request) 구성 요소
Base URL: 모델 서버의 접속 주소, https://api.openai.com/v1
모델 이름: gpt-5.1
API Key (인증): 사용자 신원 증명 토큰
메시지: 모델에 보낼 내용, JSON 배열로 구성
응답(response) 구성 요소
모델 출력 텍스트: 모델이 생성한 실제 답변
토큰 사용량: 과금 및 모델 내부 처리량 계산에 사용
메시지 구조(JSON)
사례: Google Gemini
Google AI Studio(https://aistudio.google.com/app/) 접속
- 구글 계정 로그인 필요
왼쪽 하단에서 Get API Key 클릭
오른쪽 상단에서 API 키 만들기 클릭
새 키 만들기 창
키 이름 지정: 이름 지정
가져온 프로젝트 선택: 프로젝트 가져오기 혹은 프로젝트 만들기
오른쪽 아이콘 중 Copy API key 선택
사례: Google Gemini
콘솔:
usethis::edit_r_environ()실행.Renviron파일GEMINI_API_KEY=your_key_here저장
Session > Restart R 실행
ellmer 패키지
ellmer 패키지
library(ellmer)
chat <- chat_google_gemini(
base_url = "https://generativelanguage.googleapis.com/v1beta/",
api_key = Sys.getenv("GEMINI_API_KEY"),
model = "gemini-2.5-flash",
system_prompt = ""
)
chat$chat("서울대학교 AI융합교육학과를 소개해주세요.")library(ellmer)
chat <- chat_google_gemini(
base_url = "https://generativelanguage.googleapis.com/v1beta/",
api_key = Sys.getenv("GEMINI_API_KEY"),
model = "gemini-2.5-flash",
system_prompt = ""
)
chat$chat("서울대학교 AI융합교육학과를 소개해주세요.")서울대학교 AI융합교육학과는 AI 기술과 교육학의 전문성을 결합하여 AI 시대의 교육 혁신을 이끌어갈 인재를 양성하기 위해 설립된 혁신적인
학과입니다. 단순히 AI 기술자를 양성하는 것을 넘어, 교육 현장에 AI를 효과적으로 적용하고, AI 시대에 필요한 새로운 교육 패러다임을
제시하는 데 중점을 둡니다.
**주요 특징 및 목표:**
1. **AI와 교육학의 융합:**
* 인공지능(AI)의 핵심 원리 및 기술(머신러닝, 딥러닝, 데이터 분석 등)에 대한 깊이 있는 이해를 바탕으로 합니다.
* 동시에 교육학 이론, 교수학습 방법론, 교육공학, 교육심리 등 교육학적 통찰력을 결합하여 AI를 교육적으로 활용할 수 있는
역량을 키웁니다.
* AI 기반 교수학습 시스템 개발, 지능형 튜터링 시스템 설계, 교육 데이터 분석 및 활용, AI 교육 콘텐츠 기획 및 제작 등을
다룹니다.
2. **미래 교육 혁신 선도:**
* AI 기술이 교육에 미치는 긍정적 영향뿐만 아니라 윤리적, 사회적 문제에 대한 이해를 바탕으로 AI 시대에 적합한 교육 방향을
모색합니다.
* 개별 학습자 맞춤형 교육, 협력 학습 환경 조성, 평가 방식 혁신 등 AI 기반 교육 혁신 모델을 연구하고 구현하는 데
주력합니다.
3. **실천적 문제 해결 능력 함양:**
* 이론 학습을 넘어 실제 교육 현장의 문제를 AI 기술로 해결하는 프로젝트 기반 학습을 강조합니다.
* 교육 현장과 연계된 실습, 인턴십 등을 통해 실무 역량을 강화합니다.
4. **다학제적 접근:**
* 컴퓨터 과학, 데이터 과학, 인지 과학, 교육학 등 다양한 학문 분야의 지식을 통합적으로 학습하여 융합적 사고 능력을 키웁니다.
**교육과정 (예시, 실제 커리큘럼은 변경될 수 있음):**
* **AI 기초:** 인공지능 개론, 프로그래밍, 자료구조, 알고리즘, 머신러닝 기초, 딥러닝 기초 등
* **교육학 심화:** 교육학 개론, 교육심리학, 교육철학, 교수학습이론, 교육공학, 교육과정 및 평가 등
* **AI융합 교육 특화:** AI와 교육, 지능형 학습 시스템 설계, 교육 데이터 분석 및 시각화, AI 기반 교육 콘텐츠 개발,
에듀테크 스타트업 실무, AI 윤리와 교육, 미래 교육과 기술 등
**졸업 후 진로:**
AI융합교육학과 졸업생들은 AI 기술과 교육학적 전문성을 동시에 갖춘 융합 인재로서 다양한 분야에서 활약할 수 있습니다.
* **에듀테크 기업:** AI 기반 교육 콘텐츠 개발자, 교육 솔루션 기획자, 데이터 분석가, 서비스 운영자 등
* **정부 및 공공기관:** AI 교육 정책 전문가, 교육 시스템 개발 및 관리자, 교육 연구원 등
* **학교 및 교육기관:** AI 활용 교육 전문가, 미래 교육 과정 기획자, 교수학습 지원 전문가 등
* **일반 기업:** 기업 교육 및 HRD 부서의 AI 기반 인재 개발 전문가
* **연구기관:** AI 교육 분야 전문 연구원
* **창업:** 에듀테크 스타트업 창업
* **대학원 진학:** AI, 교육공학, 컴퓨터 과학 등 관련 분야 심화 학습
서울대학교 AI융합교육학과는 AI 시대의 교육 혁신을 주도하며 새로운 지평을 열어갈 핵심 인재 양성의 요람이 될 것입니다. AI 기술에 대한
흥미와 교육 분야에 대한 열정을 가진 학생들에게 매우 적합한 학과입니다.
로컬 LLM: Ollama
Ollama 홈페이지 접속: https://ollama.com/
Download 클릭
- Windows / macOS / Linux 중 하나를 선택
모델 다운로드: Windows PowerShell 실행
ollama pull gemma3:4b
실행
로컬 LLM: Ollama
library(ellmer)
chat <- chat_ollama(
base_url = "http://localhost:11434",
model = "gemma3:4b",
system_prompt = ""
)
chat$chat("서울대학교 AI융합교육학과를 소개해주세요.")library(ellmer)
chat <- chat_ollama(
base_url = "http://localhost:11434",
model = "gemma3:4b",
system_prompt = ""
)
chat$chat("서울대학교 AI융합교육학과를 소개해주세요.")서울대학교 AI융합교육학과(이하 AI융합학과)는 인공지능(AI) 기술이 빠르게 발전하면서 교육 분야에 미치는 영향에 주목하여, AI 기술과
교육을 융합적으로 이해하고 활용하는 인재를 양성하기 위해 설립된 학과입니다. 2023년 신설되었으며, AI 기술을 교육 분야에 적용하는 방법을
연구하고 교육하는 데 집중하고 있습니다.
**학과 특징 및 목표:**
* **AI와 교육의 융합:** AI 기술을 단순히 활용하는 것을 넘어, 교육 과정 설계, 학습 방법, 평가 방법 등 교육의 전반에 걸쳐
AI 기술이 어떻게 혁신을 가져올 수 있는지 탐구합니다.
* **융합적 사고 능력:** 교육학, 컴퓨터 과학, 인지과학, 심리학 등 다양한 분야의 지식을 융합하여 교육 문제를 해결하고 새로운 교육
모델을 개발하는 능력을 키웁니다.
* **실용적인 AI 교육 콘텐츠 개발:** AI 기술을 활용한 교육 솔루션, 학습 콘텐츠, 평가 시스템 등을 개발하고 적용하는 실무
능력을 배양합니다.
* **미래 교육을 선도하는 인재 양성:** AI 기술 발전에 발맞춰 미래 교육 환경을 예측하고, 새로운 교육 패러다임을 제시하는 리더를
육성합니다.
**주요 교육 내용:**
* **기초 교양:** 교육학 원론, 인지심리학, 통계학 등 교육 및 AI 분야의 기초 지식을 다룹니다.
* **핵전공:**
* AI 기초 (머신러닝, 딥러닝, 자연어 처리 등)
* 교육용 AI 시스템 개발
* AI 기반 학습 콘텐츠 설계 및 개발
* AI 윤리 및 교육
* **교양:** AI, 빅데이터, 데이터 분석 등의 최신 기술 동향을 학습합니다.
* **선택 과목:** 교육 평가, 교육 심리, 교육 공학 등 다양한 분야의 선택 과목을 통해 전문성을 심화합니다.
**졸업 목표:**
AI 기술을 활용하여 교육 혁신을 주도하고, 미래 교육 환경을 선도할 수 있는 인재를 목표로 합니다. 구체적으로 다음과 같은 역량을 갖추게
됩니다.
* AI 기술을 교육 현장에 적용하는 비즈니스 모델을 설계하고 개발할 수 있습니다.
* AI 기반의 맞춤형 학습 시스템을 구축하고 운영할 수 있습니다.
* AI 윤리 문제를 고려하여 교육용 AI 시스템을 개발하고 사용할 수 있습니다.
* 교육 분야의 새로운 트렌드를 분석하고, 미래 교육을 위한 전략을 제시할 수 있습니다.
**더 자세한 정보는 다음 링크에서 확인하실 수 있습니다.**
* **서울대학교 AI융합교육학과 홈페이지:**
[https://www.snu.ac.kr/ai_edu/](https://www.snu.ac.kr/ai_edu/)
* **학과 소개 영상:**
[https://www.youtube.com/watch?v=lFp-N0qQ93I](https://www.youtube.com/watch?v=lFp-N0qQ93I)
궁금한 점이 있으시면 언제든지 다시 질문해주세요.









